MIP
  • Results
Base foresight
  • Capacity and Generation
  • Capacity Tables
  • Transmission Expansion
  • Emissions
  • Dispatch
  • Capacity Factors
  • Operational Results
  • Total Capacity
  • New-build Capacity
  • Existing Capacity
  • Total Capacity (wide)
  • Regional Capacity
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/vegalite/v5/api.py in ?(self, include, exclude)
   2154         # see https://github.com/ipython/ipython/issues/11038
   2155         try:
   2156             dct = self.to_dict()
   2157         except Exception:
-> 2158             utils.display_traceback(in_ipython=True)
   2159             return {}
   2160         else:
   2161             return renderers.get()(dct)

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/vegalite/v5/api.py in ?(self, *args, **kwargs)
   2516             # for easier specification of datum encodings.
   2517             copy = self.copy(deep=False)
   2518             copy.data = core.InlineData(values=[{}])
   2519             return super(Chart, copy).to_dict(*args, **kwargs)
-> 2520         return super().to_dict(*args, **kwargs)

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/vegalite/v5/api.py in ?(self, *args, **kwargs)
    846 
    847         # TopLevelMixin instance does not necessarily have to_dict defined
    848         # but due to how Altair is set up this should hold.
    849         # Too complex to type hint right now
--> 850         dct = super(TopLevelMixin, copy).to_dict(*args, **kwargs)  # type: ignore[misc]
    851 
    852         # TODO: following entries are added after validation. Should they be validated?
    853         if is_top_level:

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(self, validate, ignore, context)
    792                 k: v for k, v in kwds.items() if k not in list(ignore) + ["shorthand"]
    793             }
    794             if "mark" in kwds and isinstance(kwds["mark"], str):
    795                 kwds["mark"] = {"type": kwds["mark"]}
--> 796             result = _todict(
    797                 kwds,
    798                 context=context,
    799             )

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(obj, context)
    336         return obj.to_dict(validate=False, context=context)
    337     elif isinstance(obj, (list, tuple, np.ndarray)):
    338         return [_todict(v, context) for v in obj]
    339     elif isinstance(obj, dict):
--> 340         return {k: _todict(v, context) for k, v in obj.items() if v is not Undefined}
    341     elif hasattr(obj, "to_dict"):
    342         return obj.to_dict()
    343     elif isinstance(obj, np.number):

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(.0)
--> 340 def _todict(obj, context):
    341     """Convert an object to a dict representation."""
    342     if isinstance(obj, SchemaBase):
    343         return obj.to_dict(validate=False, context=context)

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(obj, context)
    333 def _todict(obj, context):
    334     """Convert an object to a dict representation."""
    335     if isinstance(obj, SchemaBase):
--> 336         return obj.to_dict(validate=False, context=context)
    337     elif isinstance(obj, (list, tuple, np.ndarray)):
    338         return [_todict(v, context) for v in obj]
    339     elif isinstance(obj, dict):

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(self, validate, ignore, context)
    792                 k: v for k, v in kwds.items() if k not in list(ignore) + ["shorthand"]
    793             }
    794             if "mark" in kwds and isinstance(kwds["mark"], str):
    795                 kwds["mark"] = {"type": kwds["mark"]}
--> 796             result = _todict(
    797                 kwds,
    798                 context=context,
    799             )

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(obj, context)
    336         return obj.to_dict(validate=False, context=context)
    337     elif isinstance(obj, (list, tuple, np.ndarray)):
    338         return [_todict(v, context) for v in obj]
    339     elif isinstance(obj, dict):
--> 340         return {k: _todict(v, context) for k, v in obj.items() if v is not Undefined}
    341     elif hasattr(obj, "to_dict"):
    342         return obj.to_dict()
    343     elif isinstance(obj, np.number):

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(.0)
--> 340 def _todict(obj, context):
    341     """Convert an object to a dict representation."""
    342     if isinstance(obj, SchemaBase):
    343         return obj.to_dict(validate=False, context=context)

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(obj, context)
    333 def _todict(obj, context):
    334     """Convert an object to a dict representation."""
    335     if isinstance(obj, SchemaBase):
--> 336         return obj.to_dict(validate=False, context=context)
    337     elif isinstance(obj, (list, tuple, np.ndarray)):
    338         return [_todict(v, context) for v in obj]
    339     elif isinstance(obj, dict):

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/vegalite/v5/schema/channels.py in ?(self, validate, ignore, context)
     43                 # We still parse it out of the shorthand, but drop it here.
     44                 parsed.pop('type', None)
     45             elif not (type_in_shorthand or type_defined_explicitly):
     46                 if isinstance(context.get('data', None), pd.DataFrame):
---> 47                     raise ValueError(
     48                         'Unable to determine data type for the field "{}";'
     49                         " verify that the field name is not misspelled."
     50                         " If you are referencing a field from a transform,"

ValueError: Unable to determine data type for the field "tech_type"; verify that the field name is not misspelled. If you are referencing a field from a transform, also confirm that the data type is specified correctly.
alt.Chart(...)
  • Total Generation
  • New-build Generation
  • Existing Generation
  • Total Generation (wide)
  • Regional Generation
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/vegalite/v5/api.py in ?(self, include, exclude)
   2154         # see https://github.com/ipython/ipython/issues/11038
   2155         try:
   2156             dct = self.to_dict()
   2157         except Exception:
-> 2158             utils.display_traceback(in_ipython=True)
   2159             return {}
   2160         else:
   2161             return renderers.get()(dct)

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/vegalite/v5/api.py in ?(self, *args, **kwargs)
    846 
    847         # TopLevelMixin instance does not necessarily have to_dict defined
    848         # but due to how Altair is set up this should hold.
    849         # Too complex to type hint right now
--> 850         dct = super(TopLevelMixin, copy).to_dict(*args, **kwargs)  # type: ignore[misc]
    851 
    852         # TODO: following entries are added after validation. Should they be validated?
    853         if is_top_level:

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(self, validate, ignore, context)
    792                 k: v for k, v in kwds.items() if k not in list(ignore) + ["shorthand"]
    793             }
    794             if "mark" in kwds and isinstance(kwds["mark"], str):
    795                 kwds["mark"] = {"type": kwds["mark"]}
--> 796             result = _todict(
    797                 kwds,
    798                 context=context,
    799             )

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(obj, context)
    336         return obj.to_dict(validate=False, context=context)
    337     elif isinstance(obj, (list, tuple, np.ndarray)):
    338         return [_todict(v, context) for v in obj]
    339     elif isinstance(obj, dict):
--> 340         return {k: _todict(v, context) for k, v in obj.items() if v is not Undefined}
    341     elif hasattr(obj, "to_dict"):
    342         return obj.to_dict()
    343     elif isinstance(obj, np.number):

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(.0)
--> 340 def _todict(obj, context):
    341     """Convert an object to a dict representation."""
    342     if isinstance(obj, SchemaBase):
    343         return obj.to_dict(validate=False, context=context)

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(obj, context)
    333 def _todict(obj, context):
    334     """Convert an object to a dict representation."""
    335     if isinstance(obj, SchemaBase):
--> 336         return obj.to_dict(validate=False, context=context)
    337     elif isinstance(obj, (list, tuple, np.ndarray)):
    338         return [_todict(v, context) for v in obj]
    339     elif isinstance(obj, dict):

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/vegalite/v5/api.py in ?(self, *args, **kwargs)
    846 
    847         # TopLevelMixin instance does not necessarily have to_dict defined
    848         # but due to how Altair is set up this should hold.
    849         # Too complex to type hint right now
--> 850         dct = super(TopLevelMixin, copy).to_dict(*args, **kwargs)  # type: ignore[misc]
    851 
    852         # TODO: following entries are added after validation. Should they be validated?
    853         if is_top_level:

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(self, validate, ignore, context)
    792                 k: v for k, v in kwds.items() if k not in list(ignore) + ["shorthand"]
    793             }
    794             if "mark" in kwds and isinstance(kwds["mark"], str):
    795                 kwds["mark"] = {"type": kwds["mark"]}
--> 796             result = _todict(
    797                 kwds,
    798                 context=context,
    799             )

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(obj, context)
    336         return obj.to_dict(validate=False, context=context)
    337     elif isinstance(obj, (list, tuple, np.ndarray)):
    338         return [_todict(v, context) for v in obj]
    339     elif isinstance(obj, dict):
--> 340         return {k: _todict(v, context) for k, v in obj.items() if v is not Undefined}
    341     elif hasattr(obj, "to_dict"):
    342         return obj.to_dict()
    343     elif isinstance(obj, np.number):

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(.0)
--> 340 def _todict(obj, context):
    341     """Convert an object to a dict representation."""
    342     if isinstance(obj, SchemaBase):
    343         return obj.to_dict(validate=False, context=context)

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(obj, context)
    334     """Convert an object to a dict representation."""
    335     if isinstance(obj, SchemaBase):
    336         return obj.to_dict(validate=False, context=context)
    337     elif isinstance(obj, (list, tuple, np.ndarray)):
--> 338         return [_todict(v, context) for v in obj]
    339     elif isinstance(obj, dict):
    340         return {k: _todict(v, context) for k, v in obj.items() if v is not Undefined}
    341     elif hasattr(obj, "to_dict"):

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(.0)
--> 338 def _todict(obj, context):
    339     """Convert an object to a dict representation."""
    340     if isinstance(obj, SchemaBase):
    341         return obj.to_dict(validate=False, context=context)

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(obj, context)
    333 def _todict(obj, context):
    334     """Convert an object to a dict representation."""
    335     if isinstance(obj, SchemaBase):
--> 336         return obj.to_dict(validate=False, context=context)
    337     elif isinstance(obj, (list, tuple, np.ndarray)):
    338         return [_todict(v, context) for v in obj]
    339     elif isinstance(obj, dict):

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/vegalite/v5/api.py in ?(self, *args, **kwargs)
   2516             # for easier specification of datum encodings.
   2517             copy = self.copy(deep=False)
   2518             copy.data = core.InlineData(values=[{}])
   2519             return super(Chart, copy).to_dict(*args, **kwargs)
-> 2520         return super().to_dict(*args, **kwargs)

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/vegalite/v5/api.py in ?(self, *args, **kwargs)
    846 
    847         # TopLevelMixin instance does not necessarily have to_dict defined
    848         # but due to how Altair is set up this should hold.
    849         # Too complex to type hint right now
--> 850         dct = super(TopLevelMixin, copy).to_dict(*args, **kwargs)  # type: ignore[misc]
    851 
    852         # TODO: following entries are added after validation. Should they be validated?
    853         if is_top_level:

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(self, validate, ignore, context)
    792                 k: v for k, v in kwds.items() if k not in list(ignore) + ["shorthand"]
    793             }
    794             if "mark" in kwds and isinstance(kwds["mark"], str):
    795                 kwds["mark"] = {"type": kwds["mark"]}
--> 796             result = _todict(
    797                 kwds,
    798                 context=context,
    799             )

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(obj, context)
    336         return obj.to_dict(validate=False, context=context)
    337     elif isinstance(obj, (list, tuple, np.ndarray)):
    338         return [_todict(v, context) for v in obj]
    339     elif isinstance(obj, dict):
--> 340         return {k: _todict(v, context) for k, v in obj.items() if v is not Undefined}
    341     elif hasattr(obj, "to_dict"):
    342         return obj.to_dict()
    343     elif isinstance(obj, np.number):

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(.0)
--> 340 def _todict(obj, context):
    341     """Convert an object to a dict representation."""
    342     if isinstance(obj, SchemaBase):
    343         return obj.to_dict(validate=False, context=context)

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(obj, context)
    333 def _todict(obj, context):
    334     """Convert an object to a dict representation."""
    335     if isinstance(obj, SchemaBase):
--> 336         return obj.to_dict(validate=False, context=context)
    337     elif isinstance(obj, (list, tuple, np.ndarray)):
    338         return [_todict(v, context) for v in obj]
    339     elif isinstance(obj, dict):

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(self, validate, ignore, context)
    792                 k: v for k, v in kwds.items() if k not in list(ignore) + ["shorthand"]
    793             }
    794             if "mark" in kwds and isinstance(kwds["mark"], str):
    795                 kwds["mark"] = {"type": kwds["mark"]}
--> 796             result = _todict(
    797                 kwds,
    798                 context=context,
    799             )

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(obj, context)
    336         return obj.to_dict(validate=False, context=context)
    337     elif isinstance(obj, (list, tuple, np.ndarray)):
    338         return [_todict(v, context) for v in obj]
    339     elif isinstance(obj, dict):
--> 340         return {k: _todict(v, context) for k, v in obj.items() if v is not Undefined}
    341     elif hasattr(obj, "to_dict"):
    342         return obj.to_dict()
    343     elif isinstance(obj, np.number):

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(.0)
--> 340 def _todict(obj, context):
    341     """Convert an object to a dict representation."""
    342     if isinstance(obj, SchemaBase):
    343         return obj.to_dict(validate=False, context=context)

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(obj, context)
    333 def _todict(obj, context):
    334     """Convert an object to a dict representation."""
    335     if isinstance(obj, SchemaBase):
--> 336         return obj.to_dict(validate=False, context=context)
    337     elif isinstance(obj, (list, tuple, np.ndarray)):
    338         return [_todict(v, context) for v in obj]
    339     elif isinstance(obj, dict):

/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/altair/vegalite/v5/schema/channels.py in ?(self, validate, ignore, context)
     43                 # We still parse it out of the shorthand, but drop it here.
     44                 parsed.pop('type', None)
     45             elif not (type_in_shorthand or type_defined_explicitly):
     46                 if isinstance(context.get('data', None), pd.DataFrame):
---> 47                     raise ValueError(
     48                         'Unable to determine data type for the field "{}";'
     49                         " verify that the field name is not misspelled."
     50                         " If you are referencing a field from a transform,"

ValueError: Unable to determine data type for the field "tech_type"; verify that the field name is not misspelled. If you are referencing a field from a transform, also confirm that the data type is specified correctly.
alt.FacetChart(...)
  • Total Start Existing Capacity
  • Total End Existing Capacity
  • Regional End Existing Capacity
tech_type planning_year GenX SWITCH USENSYS
Battery 2027 21854 18016 21854
Battery 2030 21719 22314 21719
Battery 2035 20535 22137 20535
Battery 2040 84 11520 84
Battery 2045 0 nan nan
Battery 2050 0 nan nan
Coal 2027 157337 208188 157337
Coal 2030 142458 181031 142458
Coal 2035 122365 162208 122365
Coal 2040 82414 140354 82414
Coal 2045 57333 93902 57333
Coal 2050 30232 63433 30232
Distributed Solar 2027 47556 47886 47556
Distributed Solar 2030 72304 72744 72304
Distributed Solar 2035 96511 97023 96511
Distributed Solar 2040 102759 103580 102759
Distributed Solar 2045 107818 109196 107818
Distributed Solar 2050 116123 117535 116123
Geothermal 2027 676 1377 676
Geothermal 2030 621 1333 621
Geothermal 2035 591 1219 591
Geothermal 2040 398 1159 398
Geothermal 2045 217 771 217
Geothermal 2050 100 425 100
Hydro 2027 94746 98950 94746
Hydro 2030 92716 97093 92716
Hydro 2035 91778 94939 91778
Hydro 2040 89100 93961 89100
Hydro 2045 84874 91187 84874
Hydro 2050 81492 86848 81492
Natural Gas CC 2027 306785 332691 306785
Natural Gas CC 2030 305219 335095 305219
Natural Gas CC 2035 300271 333872 300271
Natural Gas CC 2040 297744 330234 297744
Natural Gas CC 2045 295809 327971 295809
Natural Gas CC 2050 287607 326130 287607
Natural Gas CT 2027 140564 177177 140564
Natural Gas CT 2030 139354 174156 139354
Natural Gas CT 2035 136588 172205 136588
Natural Gas CT 2040 130481 168784 130481
Natural Gas CT 2045 119365 160077 119365
Natural Gas CT 2050 95279 146917 95279
Nuclear 2027 97038 95924 97038
Nuclear 2030 97038 97038 97038
Nuclear 2035 97038 97038 97038
Nuclear 2040 97038 97038 97038
Nuclear 2045 97038 97038 97038
Nuclear 2050 94298 97038 94298
Solar 2027 115692 114873 115692
Solar 2030 115685 136930 115685
Solar 2035 115677 136922 115677
Solar 2040 115288 136924 115288
Solar 2045 103532 136534 103532
Solar 2050 69624 124776 69624
Wind 2027 155394 149556 155394
Wind 2030 154608 154234 154608
Wind 2035 148441 154921 148441
Wind 2040 117636 148780 117636
Wind 2045 83551 117976 83551
Wind 2050 37428 83535 37428
tech_type planning_year GenX SWITCH USENSYS
Battery 2027 21854 22355 21854
Battery 2030 21719 22278 21719
Battery 2035 20535 21478 20535
Battery 2040 84 295 84
Battery 2045 0 nan nan
Battery 2050 0 nan nan
Coal 2027 157337 188442 157337
Coal 2030 142458 164149 142458
Coal 2035 122365 145285 122365
Coal 2040 82414 101092 82414
Coal 2045 57333 73252 57333
Coal 2050 30232 36208 30232
Distributed Solar 2027 47556 72744 47556
Distributed Solar 2030 72304 97023 72304
Distributed Solar 2035 96511 103580 96511
Distributed Solar 2040 102759 109196 102759
Distributed Solar 2045 107818 117535 107818
Distributed Solar 2050 116123 117535 116123
Geothermal 2027 676 1333 676
Geothermal 2030 621 1275 621
Geothermal 2035 591 1189 591
Geothermal 2040 398 795 398
Geothermal 2045 217 498 217
Geothermal 2050 100 243 100
Hydro 2027 94746 97523 94746
Hydro 2030 92716 95785 92716
Hydro 2035 91778 94032 91778
Hydro 2040 89100 91586 89100
Hydro 2045 84874 87237 84874
Hydro 2050 81492 84569 81492
Natural Gas CC 2027 306785 335900 306785
Natural Gas CC 2030 305219 334201 305219
Natural Gas CC 2035 300271 330447 300271
Natural Gas CC 2040 297744 328077 297744
Natural Gas CC 2045 295809 326357 295809
Natural Gas CC 2050 287607 321709 287607
Natural Gas CT 2027 140564 174673 140564
Natural Gas CT 2030 139354 172872 139354
Natural Gas CT 2035 136588 169985 136588
Natural Gas CT 2040 130481 162886 130481
Natural Gas CT 2045 119365 151378 119365
Natural Gas CT 2050 95279 135690 95279
Nuclear 2027 97038 97038 97038
Nuclear 2030 97038 97038 97038
Nuclear 2035 97038 97038 97038
Nuclear 2040 97038 97038 97038
Nuclear 2045 97038 97038 97038
Nuclear 2050 94298 96414 94298
Solar 2027 115692 136934 115692
Solar 2030 115685 136922 115685
Solar 2035 115677 136925 115677
Solar 2040 115288 136765 115288
Solar 2045 103532 128140 103532
Solar 2050 69624 95221 69624
Wind 2027 155394 154252 155394
Wind 2030 154608 154981 154608
Wind 2035 148441 150939 148441
Wind 2040 117636 122788 117636
Wind 2045 83551 92334 83551
Wind 2050 37428 52080 37428
agg_zone tech_type resource_name planning_year GenX SWITCH USENSYS
Loading ITables v2.1.4 from the internet... (need help?)
  • Expansion by line
  • Total expansion
  • Total expansion map
  • Emissions
  • Emissions intensity
  • 2030 Dispatch
  • 2040 Dispatch
  • 2050 Dispatch
  • 2030 Wind Dispatch
  • 2040 Wind Dispatch
  • 2050 Wind Dispatch
  • Battery
  • Solar
  • Wind
  • Natural Gas CC
  • Natural Gas CT
  • Hydro
  • Operational costs
  • Operational NSE
  • Generation
  • Power cost